<?php
  /** Ajout de résultats des tests dans le système
   * @author Thomas Bayer
   */
   
   
 class fPlayerTestsAdd extends aSubFeature {


   public function __construct() {
      $this->_acl = new AccessControlList();
      $this->_acl->setGranted(7);
      $this->_acl->setGranted(3);
   }

   // public static function getTocEntry() {
      // return "Créer une fiche de tests";
   // }

   // public static function getRealName() {
		// return "Ajouter une fiche de tests";
	// }
	
	// public static function getSemantic() {
		// $res  = "Cette fonctionnalité permet d'ajouter les résultats des tests pour un joueur";
		// return $res;
	// }

	protected function run() {
		$action = PropRetriever::getProp($_POST,"action");
		if ($action == "add")
			return $this->addPlayerTests();
			return $this->displayForm();
	}  
	
	private function addPlayerTests() {
		//Récupération des champs du formulaire
		if (isset($_POST['memberId']))
			$memberId = intval(PropRetriever::getProp($_POST, "memberId"));
		else
			$memberId = intval(PropRetriever::getProp($_GET, "id"));
		
		$season = PropRetriever::getProp($_POST, "season");
		$date = PropRetriever::getProp($_POST, "date");
		$height = floatval(PropRetriever::getProp($_POST, "height"));
		$weight = floatval(PropRetriever::getProp($_POST, "weight"));
		$fatMass = floatval(PropRetriever::getProp($_POST, "fatMass"));
		$jump = floatval(PropRetriever::getProp($_POST, "jump"));
		$speed10m = floatval(PropRetriever::getProp($_POST, "speed10m"));
		$speed20m = floatval(PropRetriever::getProp($_POST, "speed20m"));
		$speed40m = floatval(PropRetriever::getProp($_POST, "speed40m"));
		$orientD = floatval(PropRetriever::getProp($_POST, "orientD"));
		$orientG = floatval(PropRetriever::getProp($_POST, "orientG"));
		$amortiD = floatval(PropRetriever::getProp($_POST, "amortiD"));
		$amortiG = floatval(PropRetriever::getProp($_POST, "amortiG"));
		$faceD = floatval(PropRetriever::getProp($_POST, "faceD"));
		$faceG = floatval(PropRetriever::getProp($_POST, "faceG"));
		$slalomD = floatval(PropRetriever::getProp($_POST, "slalomD"));
		$slalomG = floatval(PropRetriever::getProp($_POST, "slalomG"));
		$head = floatval(PropRetriever::getProp($_POST, "head"));
		
		
		//Traitement des erreurs
		$errors = array();
		if ($date == "")
			$errors["date"] = "Veuillez entrer la date à laquelle les tests ont été effectués !";
			else if (! Date::isValidDate($date))
				$errors["date"] = "La date n'est pas valide !";
		
		if (!is_float($height))
			$errors["height"] = "La taille doit être un nombre entier !";
			else if ($height < 0)
				$errors["height"] = "La taille ne peut pas être négative !";
		
		if (!is_float($weight))
			$errors["weight"] = "Le poids doit être un nombre décimal !";
			else if ($weight < 0)
				$errors["weight"] = "Le poids ne peut pas être négatif !";
			
		if ($fatMass != "" && !is_float($fatMass))
			$errors["fatMass"] = "La masse grasse doit être un nombre décimal !";
			else if ($fatMass < 0)
				$errors["fatMass"] = "La masse grasse ne peut pas être négative !";
				
		if ($jump != "" && !is_float($jump))
			$errors["jump"] = "La détente doit être un nombre décimal !";
			else if ($jump < 0)
				$errors["jump"] = "La détente ne peut pas être négative !";
				
		if (($speed10m !="" && !is_float($speed10m)) || ($speed20m !="" && !is_float($speed20m)) || ($speed40m !="" && !is_float($speed40m)) || 
			($orientD !="" && !is_float($orientD)) || ($orientG !="" && !is_float($orientG)) || 
			($amortiD !="" && !is_float($amortiD)) || ($amortiG !="" && !is_float($amortiG)) || 
			($faceD !="" && !is_float($faceD)) || ($faceG !="" && !is_float($faceG)) || 
			($slalomD !="" && !is_float($slalomD)) || ($slalomG !="" && !is_float($slalomG)) || ($head !="" && !is_float($head)))
			$errors["tests"] = "Les résultats de tous les tests sont des nombres décimaux !";
			else if (($speed10m < 0) || ($speed20m < 0) || ($speed40m < 0) || 
				($orientD < 0) || ($orientG < 0) || 
				($amortiD < 0) || ($amortiG < 0) || 
				($faceD < 0) || ($faceG < 0) || 
				($slalomD < 0) || ($slalomG < 0) || ($head < 0))
				$errors["tests"] = "Les résultats de tous les tests doivent être positifs !";
		
		// Il y a des erreurs : 
		if (count($errors) != 0)
			 return $this->displayForm($errors);
		else {
		 
			// Instanciation de la fiche
		$season = Login::seasonChoosen();
   	 	$aPlayerTests = new PlayerTests();
   	 	$aPlayerTests->setMemberId($memberId);
   	 	$aPlayerTests->setSeason($season);
   	 	$aPlayerTests->setDate(Date::fromSql($date));
   	 	$aPlayerTests->setHeight($height);
   	 	$aPlayerTests->setWeight($weight);
   	 	$aPlayerTests->setFatMass($fatMass);
   	 	$aPlayerTests->setJump($jump);
		$aPlayerTests->setSpeed10m($speed10m);
   	 	$aPlayerTests->setSpeed20m($speed20m);
   	 	$aPlayerTests->setSpeed40m($speed40m);
   	 	$aPlayerTests->setOrientD($orientD);
   	 	$aPlayerTests->setOrientG($orientG);
   	 	$aPlayerTests->setAmortiD($amortiD);
   	 	$aPlayerTests->setAmortiG($amortiG);
   	 	$aPlayerTests->setFaceD($faceD);
   	 	$aPlayerTests->setFaceG($faceG);
   	 	$aPlayerTests->setSlalomD($slalomD);
   	 	$aPlayerTests->setSlalomG($slalomG);
   	 	$aPlayerTests->setHead($head);
		 
		// A t'on déjà ajouté cette fiche ??
		$lastInsert = Login::lastInsert();
		if ($lastInsert["ClassName"] == "PlayerTests") {
			$exist = True;
			
			try {
				$lastPlayerTests = PlayerTests::read($lastInsert["LastId"]);
			}
			catch(Exception $e) {
			  $exist = False;
			}
			
			if ($exist and $lastPlayerTests->soundsLike($aPlayerTests)) {
				$aPlayerTests = $lastPlayerTests;
			}
			else {
				$aPlayerTests->create();
			}
		}
		else {
			$aPlayerTests->create();
		}
		
		Login::lastInsert($aPlayerTests->tag());
		 
		 
		// On purge le tableau de données
		$_POST["date"] = "";
		$_POST["height"] = "";
		$_POST["weight"] = "";
		$_POST["fatMass"] = "";
		$_POST["jump"] = "";
		$_POST["speed10m"] = "";
		$_POST["speed20m"] = "";
		$_POST["speed40m"] = "";
		$_POST["orientD"] = "";
		$_POST["orientG"] = "";
		$_POST["amortiD"] = "";
		$_POST["amortiG"] = "";
		$_POST["faceD"] = "";
		$_POST["faceG"] = "";
		$_POST["slalomD"] = "";
		$_POST["slalomG"] = "";
		$_POST["head"] = "";
		
		$header = $this->displayForm();
		$page = <<<EOS
<h2> Ajout effectué avec succès ! </h2>
EOS;
		return $header . $page;
		 }
		
	}
	
	private function displayForm($errors = array()) {
	
	// Récupération des infos
		if (isset($_POST['memberId']))
			$memberId = intval(PropRetriever::getProp($_POST, "memberId"));
		else
			$memberId = intval(PropRetriever::getProp($_GET, "id"));
			
	$season = Login::seasonChoosen();
	$date = PropRetriever::getProp($_POST, "date");
	$height = floatval(PropRetriever::getProp($_POST, "height"));
	$weight = floatval(PropRetriever::getProp($_POST, "weight"));
	$fatMass = floatval(PropRetriever::getProp($_POST, "fatMass"));
	$jump = floatval(PropRetriever::getProp($_POST, "jump"));
	$speed10m = floatval(PropRetriever::getProp($_POST, "speed10m"));
	$speed20m = floatval(PropRetriever::getProp($_POST, "speed20m"));
	$speed40m = floatval(PropRetriever::getProp($_POST, "speed40m"));
	$orientD = floatval(PropRetriever::getProp($_POST, "orientD"));
	$orientG = floatval(PropRetriever::getProp($_POST, "orientG"));
	$amortiD = floatval(PropRetriever::getProp($_POST, "amortiD"));
	$amortiG = floatval(PropRetriever::getProp($_POST, "amortiG"));
	$faceD = floatval(PropRetriever::getProp($_POST, "faceD"));
	$faceG = floatval(PropRetriever::getProp($_POST, "faceG"));
	$slalomD = floatval(PropRetriever::getProp($_POST, "slalomD"));
	$slalomG = floatval(PropRetriever::getProp($_POST, "slalomG"));
	$head = floatval(PropRetriever::getProp($_POST, "head"));
	
	// Traitement des erreurs :
	$style = array();
	$style["date"] = ""; 
	$style["height"] = "";
	$style["weight"] = ""; 
	$style["fatMass"] = "";
	$style["jump"] = ""; 
	$style["tests"] = ""; 
	
	$fails = "";
	foreach($errors as $k => $v) {
		$style[$k] = " class=\"error\" ";
		$fails .= "<li> <span class=\"error\"> $v </span> </li>";
	}
	if ($fails != "") {
		$fails = "<h2> Des erreurs sont survenues ! </h2> <p> <ul> " . $fails;
		$fails .= "</ul> </p>";
	}
	
	
   	// Calcul de la page
   	$page = <<<EOS

	<h1> Ajout d'une fiche de tests dans le système </h1>

	<p> Remplissez les champs du formulaire, puis cliquez sur 
	  <span class="error"> [ Ajouter ] </span> pour ajouter la nouvelle fiche de tests
	  dans le système. 
	</p>

	<p align="center"> 
		<a href="#" onclick="toggleHelp()">
			<span class="error">Cliquez ici  pour afficher ou masquer l'aide </span>
		</a>
	</p>

	<div id="onlineHelp" style="display: none;">
		<p> <strong> Aide a la saisie des données </strong> : 
			<ul>   
				<li> Pour saisir la date, vous pouvez directement la taper au format <code>AAAA-MM-JJ</code>, ou cliquer dans le champ pour faire apparaitre un calendrier</li>
				<li> La taille doit être un nombre entier.</li>
				<li> Le poids, la masse grasse et la détente doivent être des nombres décimaux.</li>
			</ul>
		</p> 
	</div>
	
	${fails}

	<br />


	<div align="center">

	<form method="post" accept-charset="utf-8" name="addMember"
				action="?add" >
	
	<input type="hidden" name="memberId" value=$memberId />
	<input type="hidden" name="season" value=$season />
	<input type="hidden" name="action" value="add" />

	<table> 
		<tr> 
			<td align="center">

				<fieldset>
					<legend> Administration </legend>
					<br />
					
					<label> 
						<span ${style["date"]}>Date des tests :</span>
						 <input type="text" name="date" id="date" class="edit" value="$date" 
										onclick="javascript:displayBalloonCal('date')" />
						&nbsp; &nbsp;
					</label>
					<br />
				</fieldset>
		
			</td>

			<td> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td>
			
			<td rowspan="3" align="center">
				<fieldset>
					<legend> Tests techniques </legend>
					<br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Contrôle orienté + Jeu court D (s) : </strong> </div>
					<input type="text" name="orientD" class="edit" value="$orientD" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Contrôle orienté + Jeu court G (s) : </strong> </div>
					<input type="text" name="orientG" class="edit" value="$orientG" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Amorti + Jeu long D (s) : </strong> </div>
					<input type="text" name="amortiD" class="edit" value="$amortiD" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Amorti + Jeu long G (s) : </strong> </div>
					<input type="text" name="amortiG" class="edit" value="$amortiG" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Contrôle de face + Tir au but D (s) : </strong> </div>
					<input type="text" name="faceD" class="edit" value="$faceD" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Contrôle de face + Tir au but G (s): </strong> </div>
					<input type="text" name="faceG" class="edit" value="$faceG" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Conduite Slalom 20m D (s) : </strong> </div>
					<input type="text" name="slalomD" class="edit" value="$slalomD" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Conduite Slalom 20m G (s) : </strong> </div>
					<input type="text" name="slalomG" class="edit" value="$slalomG" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Jeu de tête (note /20) : </strong> </div>
					<input type="text" name="head" class="edit" value="$head" /> 
					</label>
					<br /> <br />
					
				</fieldset>
			</td>
		</tr>
		
		<tr>
			<td>&nbsp;</td>
		</tr>
		
		<tr>
			<td align="center">
				<fieldset>
					<legend> Tests physiques </legend>
					<br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Taille (cm) : </strong> </div>
					<input type="text" name="height" class="edit" value="$height" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Poids (kg) : </strong> </div>
					<input type="text" name="weight" class="edit" value="$weight" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Masse grasse : </strong> </div>
					<input type="text" name="fatMass" class="edit" value="$fatMass" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Détente (cm) : </strong> </div>
					<input type="text" name="jump" class="edit" value="$jump" /> 
					</label>
					<br /> <br />

					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Vitesse 10m (s) : </strong> </div>
					<input type="text" name="speed10m" class="edit" value="$speed10m" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Vitesse 20m (s) : </strong> </div>
					<input type="text" name="speed20m" class="edit" value="$speed20m" /> 
					</label>
					<br /> <br />
					
					<label> 
					<div align="left"> &nbsp; &nbsp; <strong> Vitesse 40m (s) : </strong> </div>
					<input type="text" name="speed40m" class="edit" value="$speed40m" /> 
					</label>
					<br /> <br />
				</fieldset>
			</td>
		</tr>	
		
		<tr>
			<td> &nbsp;</td>
		</tr>
		
		<tr>
			<td> &nbsp;</td>
			<td align="center"> <input type="submit" value="Ajouter" class="add" /> </td>
		</tr>
		
	</table>
	
EOS;

	return $page;
	}
} 

   
?>